package com.cskaoyan.javase.two._1basic._1initialization;

/**
 * @description: 二维数组的初始化
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 二维数组的初始化需要完成什么?
 *      1,二维数组的长度必须要明确,这样jvm才能开辟空间创建对象
 *      2,二维数组中的元素(就是那些一维数组)具有默认初始化默认值为null,它不需要明确给出
 *      3,如果明确给出了二维数组中的一维数组,那么一维数组中的元素也是不需要明确赋值的,因为它们也有默认值
 *
 * 二维数组初始化的语法:
 *      1,静态初始化,直接告诉二维数组中一维数组的个数和它的元素
 *      数据类型[][] 数组名 = _1new 数据类型[][]{{元素1,元素2..},{元素1...},...};
 *
 *      静态初始化同样可以简写,可以省略new 数据类型[][]
 *      它的简写也必须和声明写在一起,不能直接用数组名=
 *
 *      2,动态初始化
 *         格式一:
 *          数据类型[][] 数组名 = _1new 数据类型[二维数组的长度][];
 *
 *         格式二:
 *          数据类型[][] 数组名 = _1new 数据类型[二维数组的长度][一维数组的长度];
 *
 *     格式一和格式二比较:
 *          格式一动态初始化的数组是不能直接使用的,因为里面全都是null
 *          这个时候如果你想使用应该先自己去初始化其中的一维数组
 *          相对于格式二更加灵活
 *
 *          格式二数组显然是可以直接用的,但是这个二维数组中每个小一维数组的长度都是固定的,所以相对于格式一,它不够灵活
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        //静态初始化一个int二维数组
        int[][] arr = new int[][]{}; //长度为0的二维数组
        int[][] arr2 = new int[][]{{1, 2, 3}, {8, 9}};

        int[][] arr3 = {{1, 2}, {3, 4}};

        //格式一动态初始化二维数组
        int[][] arr4 = new int[3][];

        //格式二动态初始化二维数组
        int[][] arr5 = new int[2][3];
    }
}
